package com.xiaomu.common;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;
import com.xiaomu.controller.IndexController;
import com.xiaomu.controller.UserController;
import com.xiaomu.model.User;

public class MainConfig extends JFinalConfig {

	@Override
	public void configConstant(Constants me) {
		// JFinal 常量配置（具有先后顺序的）
		// 常量配置是第一个被加载的，因为后面的配置需要用到这里配置的一些常量作为基础
		// 1、加载数据库配置 读取配置文件使用loadPropertyFile或者PropKit 读取
		// loadPropertyFile("config.properties");
		PropKit.use("config.properties");// 使用广，一般使用这个
		// 2、设置开发模式 默认的为false
		// 运行在开发模式下(开发模式下，JFinal 会对每次请求输出报告，如输出本次请求的 Controller、Method
		// 以及请求所携带的参数)Console会体现
		// me.setDevMode(true);//直接设置，无需读配置文件
		// me.setDevMode(getPropertyToBoolean("devMode"));//从第一个配置文件中读取
		me.setDevMode(PropKit.getBoolean("devMode"));// 从第一个配置文件中读取
		// 设置Action Report什么出现 默认是true（true是先在控制台打印，后去执行）
		// me.setReportAfterInvocation(false);
		// 3、配置默认的视图类型类型 默认的是Freemarker (JFinal 支持 JSP、FreeMarker、Velocity
		// 三种常用视图)
		me.setViewType(ViewType.JSP);
		// 4、配置默认的视图层路径viewpath 默认的是WebRoot路径下的
		me.setBaseViewPath("/WEB-INF/view");
		// 5、配置默认上传路径 cods组件有效 final默认有值 相对绝对都可以
		// jfinal默认值为相对路径：WebRoot/upload
		// 以"/"开头时为绝对路径,否则是相对路径WebRoot路径下
		// me.setBaseUploadPath("xmupload");
		// me.setMaxPostSize(1024*1024*20);
		// 6、配置默认下载路径 cos组件有效 jfinal默认有值 相对绝对都可以
		// me.setBaseDownloadPath("xmupload");
		// 7、配置默认的Freemarker模板文件后缀名 JFinal默认.html
		//me.setFreeMarkerViewExtension(".ftl");
		//me.setJspViewExtension(".jtl");
		//me.setVelocityViewExtension(".vtl");
		// 8、这是url参数分隔符   默认-
//		  me.setUrlParaSeparator("~");
		// 设置国际化
		// me.setI18nDefaultBaseName("i18n");
		// me.setI18nDefaultLocale("zh_CN"");
		// 设置Error View
		// me.setError404View("/common/404.html");
		// me.setErrorRenderFactory(errorRenderFactory);
		// 设置默认编码
		// me.setEncoding("GBK");
		// 设置默认的xml渲染工厂 默认使用Freemarker render渲染
		// me.setXmlRenderFactory(自定义工厂);
		// 设置默认json中时间格式化
		// me.setJsonDatePattern("yyyy-mm-dd HH:mm");
		// me.setJsonFactory(FastJsonFactory.me());
		// renderJson 和JsonKit底层依赖于JsonManager中设置的JsonFactory
		// 设置自己的Log工厂实现,日志工程
		// me.setLogFactory(Slf4JLogFactory.me());
	}

	// 此方法用来配置 JFinal 访问路由，如下代码配置了将”/hello”映射到 HelloController 这个控制 器
	// ， 通 过 以 下 的 配 置 ， http://localhost/hello 将 访 问 HelloController.index()
	// 方法，
	// 而http://localhost/hello/methodName 将访问到 HelloController.methodName()方法。
	@Override
	public void configRoute(Routes me) {
		// TODO Auto-generated method stub
		// 添加路由器
		me.add("/", IndexController.class);
		me.add("/user", UserController.class);

	}

	// 此方法用来配置 JFinal 的 Plugin，如下代码配置了 C3p0 数据库连接池插件与 ActiveRecord
	// 数据库访问插件。通过以下的配置，可以在应用中使用 ActiveRecord 非常方便地操作数据库。
	@Override
	public void configPlugin(Plugins me) {
		// jfinal配置插件
		// 输入库连接池,从配置文件获取jdbc的链接，应户名和密码
		C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
		// C3p0Plugin c3p0Plugin = new
		// C3p0Plugin(getProperty("jdbcUrl"),getProperty("user"),
		// getProperty("password"));
		me.add(c3p0Plugin);
		// 表结构的映射
		ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
		arp.setShowSql(true);
		// user对应的是user数据库表
		arp.addMapping("user", User.class);
		me.add(arp);

	}

	@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stub

	}

	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) {
		JFinal.start("WebRoot", 6666, "/", 5);
		// 端口 上下文 每个5秒刷新一次
		// JFinal.start(webAppDir, port, context, scanIntervalSeconds);
	}
}
